package org.scboy.rbac.service;

import java.util.List;

import org.scboy.utils.entitys.coobi.Model;
import org.scboy.utils.entitys.coobi.Page;

/**
 * 
 * 组织业务类相关功能。
 * @author yanghao
 *
 */
public interface OrgService {
	
	/**
	 * 分页查询组织（查询参数Model，分页参数Limit）。
	 * @param model
	 * @param limit
	 * @return
	 */
	Page page(Model model);
	
	/**
	 * 根据父节点获取组织子索引最大值（父节点ID）。
	 * @param parentId
	 * @return
	 */
	Long getMaxIndex(String parentId);
	
	/**
	 * 根据父节点ID获取组织列表（父节点ID）。
	 * @param parentId
	 * @return
	 */
	List<Model> getChilds(Model params);
	
	/**
	 * 获取所有组织
	 * @return
	 */
	List<Model> getOrgs(String parentId);
	
	/**
	 * 获取本级和下一级组织
	 * @return
	 */
	List<Model> getOrgs(Model params);
	
	/**
	 * 根据组织ID获取组织信息（组织ID）
	 * @param id
	 * @return
	 */
	Model get(String id);

	/**
	 * 获取当前用户顶级组织
	 * @param id
	 * @return
	 */
	Model getTop(String id);
	/**
	 * 新增组织（组织Model）。
	 * @param model
	 * @return
	 */
	boolean add(Model model);

	/**
	 * 从新构建相关信息
	 * @param parentId
	 * @return
	 */
	boolean grenAll(String parentId);
	
	/**
	 * 更新组织（组织Model）。加入事务注解@Transactional。
	 * @param model
	 * @return
	 */
	boolean update(Model model);
	
	/**
	 * 删除组织（组织ID）。只能删除没有关联信息的组织。加入事务注解@Transactional。
	 * @param id
	 * @return
	 */
	boolean delete(String id);
	
	/**
	 * 合并组织（新组织，组织ID，组织ID）。合并所有关联信息。加入事务注解@Transactional。
	 * @param model
	 * @param firstId
	 * @param secondId
	 * @return
	 */
	boolean merge(Model model);
	
	/**
	 * 检查编码是否存在
	 * @param code
	 * @return
	 */
	public boolean checkCode(String code);
	
	/**
	 * 查询组织人员信息
	 * @param model
	 * @return
	 */
	Page getUsers(Model model);

	/**
	 * 排序升降序。
	 * @param id
	 * @param type 0升序，1降序。
	 * @return
	 */
	boolean sort(String id,int type);
	
	/**
	 * 组织树
	 * @param params
	 * @return
	 */
	List<Model> tree(Model params);
}
